#pragma once
#ifndef ABSTRACT_FACTORY_HEADER
#define ABSTRACT_FACTORY_HEADER
#include "AbstractProduct.h"
/* Abstract Factory, 
 * factory's base class, 
 * defining factories' base interfaces: createProduct, destroyProduct
 */
class AbstractFactory {
public:
    virtual ~AbstractFactory() { }
    virtual AbstractProduct* createProduct(const std::string &type) = 0;
    virtual AbstractProduct* createProduct(const char *type) = 0;
	//no need for product to recycle yet
	//virtual void destroyProduct(AbstractProduct * p) = 0;
};
#endif